<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>类的基本知识</title>
	</head>
	<body>
		<script type="text/javascript" >
		/* 
				总结：
						1.构造器不是必须要写的，如果想对类“缔造”出来的实例对象，进行属性的初始化就写。
						2.类中的一般方法和构造器方法都是自动放在类的原型对象上的。
		*/
			//定义一个Person类
			class Person {
				//构造器方法
				constructor(name,age){
					// console.log(this) //构造器中的this是 类的实例对象
					this.name = name
					this.age = age
				}
				//一般方法，speak放在了Person的原型对象上，供实例使用
				speak(){
					// console.log(this) //若通过类的实例对象调用speak，那么this就是类的实例对象
					console.log(`我叫${this.name}，今年${this.age}岁了`)
				}
			}

			//定义一个Student类，继承于Person
			class Student extends Person {
				//构造器方法
				constructor(name,age,grade){
					super(name,age) //调用父类的构造器，实现初始化一些属性。
					this.grade = grade
				}
				//重写从父类继承过来的speak，speak放在了Student的原型对象上，供实例使用
				speak(){
					console.log(`我叫${this.name}，今年${this.age}岁了，我正在读：${this.grade}`)
				}
				study(){
					console.log('我在努力的学习')
				}
			}

			/* 
				类中能写什么代码？
						1.构造器方法
						2.一般方法
						3.赋值语句（a = 1） —— 给类的实例添加一个属性，名为a，值为1
			*/
			class Dog {
				constructor(name,age){
					this.name = name
					this.age = age
				}
				legs = '4条腿'
				eyes = '2只'
				run(){
					console.log('我在疯狂的奔跑')
				}
				static demo(){
					console.log('demo')
				}
			}

			const d = new Dog('wc',5)
			console.log(d)

		</script>
	</body>
</html>